home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
pump_src
/
dpmidvt.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-10-26
|
5KB
|
128 lines
/* ------------------------ DPMIDVT.H --------------------------- */
/* DPMI interface code to DemoVT v1.5 and higher. */
/* Written bye Jare of Iguana in 1994. */
/* -------------------------------------------------------------- */
/* Thanks to Yann for supplying all those specs, and also to Tran */
/* of nothing for getting me into this wonderful world of PMode. */
/* -------------------------------------------------------------- */
/* This code will compile under Watcom C++ 9.5. I think it should */
/* work also with other versions and under other 32 bit compilers */
/* but I haven't bothered to test. */
/* -------------------------------------------------------------- */
/* You will find some general purpose DPMI code here. Use it! */
/* Especially that RealModeMem variable. */
/* That variable is not necessary under DOS4GW, because the first */
/* megabyte is directly accesible using the default data seg. But */
/* I have included it to make this code fully portable to other, */
/* more hostile environments. */
/* You might need to translate it to assembly, but that should be */
/* easy. After all, it's your job! :) */
/* -------------------------------------------------------------- */
#ifndef _DPMIDVT_H_
#define _DPMIDVT_H_
// ------------------------------------------------------------------------
// ---------- DemoVT. The real thing.
#pragma pack(1)
typedef struct {
word period; // Period of the playing note.
byte ins; // Number of instrument, 1-31.
byte vol; // Current volume, 0-63.
} TChanData;
typedef struct sDVT_info { // DemoVT's info structure.
// Written by DemoVT.
byte semaphores [256]; // 256 semaphores used for synchronisation.
byte chansTrig [32]; // Flags that indicate note triggered for
// each channel. Useful for vu-meters.
byte numChannels; // Number of channels of the current module.
word entryPointOff, // Far pointer to the servicing routine
entryPointSeg; // that receives params thru the stack.
dword tickCounter; // 50 Hz counter. Increments 50 times per second.
word entryPointAXOff, // Far pointer to the servicing routine
entryPointAXSeg; // that gets the parameter in AX. It's just
// a PUSH AX; CALL FAR entryPointSeg:Off; RETF
TChanData chansData[32]; // Info about all playing channels.
byte pos; // Position of the current note in the pattern.
byte seq; // Order number of playing pattern.
byte _reserved2 [81];
// Read and written by DemoVT.
byte _reserved3 [3];
byte jumpNewPos, // Boolean. 1 if song must jump.
jumpPosSeq, // Sequence and note values to jump to.
jumpPosNote;
byte soundVolume; // Volume of the sound output.
byte abortDvt; // Set to 1 to abort the demo.
byte _reserved4 [248];
} TDVTInfo;
#pragma pack()
extern byte _far *RealModeMem; // This gives access to the 1st. Meg.
extern dword DVTAppIdFound; // Offset into RealModeMem of the
// DemoVT data returned.
extern volatile TDVTInfo _far *DVTInfo; // Pointer to the info structure.
// If DVT_Init fails, all these
// will be 0/NULL.
// DemoVT access functions.
extern int DVT_Init(void);
// --------
// Starts the interface variables, and returns if the DemoVT is present.
// NOTE: check for DVTInfo != NULL even if the DemoVT is present, the
// DPMI interface might fail (nobody's perfect).
extern void DVT_CallDemoVT(int command);
// --------------
// Calls DemoVT API entry point.
#define DVT_CallMusic() DVT_CallDemoVT(2)
// -------------
#define DVT_ConnectTimer() DVT_CallDemoVT(0)
// ----------------
#define DVT_DisconnectTimer() DVT_CallDemoVT(1)
// -------------------
#define DVT_BeginSync() DVT_CallDemoVT(3)
// -------------
extern dword DVT_GetTickCounter(void);
// ------------------
extern void DVT_WaitForStart(void);
// ----------------
extern void DVT_JumpPos(byte pattern, byte note);
// -----------
extern byte DVT_GetSemaphore(byte nsem);
// ----------------
extern void DVT_SetSemaphore(byte nsem, byte value);
// ----------------
extern void DVT_MiddleSync(byte nsem, byte pattern, byte note);
// --------------
extern byte DVT_GetSoundVolume(void);
// ------------------
extern void DVT_SetSoundVolume(byte vol);
// ------------------
#endif
/* ------------------------ DPMIDVT.H --------------------------- */